随着Windows 10的更新,突然看到一个非常吸引我的特性Bash On Ubuntu On Windows,我迫不及待地换回了Windows 10,好好体验了一把这个令人激动的功能。但是发现问题还是不少的,在这个Bash能跑的程序是十分有限的,就跟通过Wine跑在Linux的应用一样是十分有限的。我希望这有限的功能,可以让我的虚拟机不用再怎么开机了,目前Bash的应用我还在探索中。Win 10还有比较吸引我的的虚拟桌面的功能,这个是可以极大地提高工作效率的功能,这个功能在Linux已经实现了很久了,以前总想通过第三方的桌面实现类型的功能,现在终于由官方实现了。

对我来说Windows 10不如意的地方也还是不少的,说是有史以往前兼容性最好的操作系统,但是实际上兼容性还是有问题的。连学校图书馆数据库的VPN程序无法执行,想查一些论文还开个虚拟机。另外我的蓝牙鼠标和键盘就不好用。鼠标进入节电模式重新唤醒鼠标,蓝牙连接就无法连上,需要关闭鼠标电源重新打开。Windows 8时代,我可以安装千月驱动弥补官方驱动的不足,这个破解版的驱动并没有在Win 10上起到破解作用。驱动问题造成的麻烦是会引起极大的不便的。

1 关于激活的问题

Win10的激活策略,正版Win 7以上的直接升级后就直接激活,激活后微软服务器就会记录下你的硬件信息,以后全新安装之后联网即可自动激活。

2 安装Windows 10

Windws 10刚发布的时候,我就安装上了,体验过之后,觉得还算比较流畅,但是软件的兼容性还跟不上来,后来又换会Window 2008 R2,今天又重新安装,发现Windows Insider preview版本的加密的,有经过一番折腾才把系统装上,为此记录下来,方便以后查阅。

2.1 下载ESD文件

下载Windows 10 14393 x64 pro zh-CN下载地址

2.2 解密ESD文件

Windows Insider Preview版本下载下来的ESD文件是经过加密的,需要解密Key,Key我是从pcbeta.com找到的,老版本的esd,貌似Dism++可以解密,这个软件自带了各个版本的Key。 下载Dism++ 官方地址:https://www.chuyu.me/ esd解密key

BwIAAACkAABSU0EyAAQAAAEAAQDpBHbDTC1rTdcSHhp58n1fBY4EaGo6ez4RYAu/RGiICloh3lm4vXz6SgEAXdQEtv0HzXXpORvkm+uWzmfl02yXDSYEvmDVw9kIn0u9pxdQiwo18ezHK55zbQV+KzisSJz97ZO9Z65i+EsoUdi7clqHDcJKEuudF0BDWt16XBTdntVBt7OMhYv549C1wRjASLIJVmWmeXz1d6fw03TWQoWNUud/UY3YGEzGcPPEnJT/Rhpp2OcXYYcKbsLwVyRK7tbF7MALxBrqU440kXjBGStcfTPYYwXg/C42RSdtZcjwYl1bbzcckpB3lkunMG741JK4MR238Dl+Md6EOt1HKji9gS7cQl5RPPv/oKCcWL6PkViWHhzvwexLM1cpLcXAAum7gPYegT2PrHZUav8yEtuGTPUi4+cHHaiXStujvZ79jXV9HeJ0NEfAcie8d+4Ctph34Skj9arHA649yhat+q6iqmNWE0uTyfPNZ9tr42hLQwITCBe+jEdOYNqSRdutNDI7dGS2uG6k7UQUSLbvZ5fHI/YULMtoVI+I/kESboMj+r+ENBDslckFxS4ubUsjJcLci1ig8kZg909tlWX+wQeuAbQCzuWJbhXPJf2IcZ2o7kfPfbmYFObPVG1FgAfEo+nKSl8Pqw/7hf6t8BzWdquWvgCuqoWMJdRqL3N5Utrm6NdS0B5sJOGqqxhEXI6O02pfO/Kmt5a+JtAA7Gv5WzYtmcdNIZX5mXqqzsCoN5Vjv6jU/q3qDsRQkXw4YbypJSQ=

2.3 转换为ISO

从Windows 10的ISO文件大小已经超过4g,用UltraISO写入到U盘当中,会因为大于4g的install.wim文件无法装入fat32分区而被舍弃,所以压缩比更高且小于4g的install.esd的文件。 打开Dism++,文件 -> (ESD –> ISO) -> 选择你已经解密的ESD文件 -> 选择ISO的保存路径( 默认类型ISO镜像文件-高压版)-> 完成。

3 更新系统和安装驱动

Windows 10拥有比较完整的驱动库,联网后选择更新,就自动安装上相应的驱动。 开始–>设置–>更新和安全–>Windows更新–>更新完成之后一般的机器驱动也就安装好了。我的笔记本HP Pro 5130m带了防止掉落的传感器,需要另外安装驱动,不过我已经更换了SSD,这个传感器早就没有用了。

4 彻底卸载OneDrive

因为我自己的资料大部分是存放在金山快盘,容量又小又慢OneDrive,自然就没有必要的了。但是Windows 10是可以在多个设备上安装的,如果还买了Windows 10的手机,在Win 10应用还比较缺乏的时候,OneDrive还是会比较好用的。 找到下面这个文件夹C:\Users\用户名\AppData\Local\Microsoft\OneDrive\17.XXX\ 在这个目录下打开命令行,运行如下命令,即可卸载。

OneDriveSetup.exe /uninstall

删除导航栏中的onedrive。 卸载onedrive是不能清除导航栏里面的onedrive,进入注册表:

HKEY_CLASSES_ROOT\CLSID\{018D5C66-4533-4307-9B53-224DE2ED1FE6}\ShellFolder

把右侧的Attributes属性的值 f080004d修改为f090004d。任务管理器中重启资源管理器后就生效了。

5 设置输入法默认英文模式

设置 -> 语言和文字 -> 区域和语言 -> 语言 -> 选项 -> 微软拼音 -> 选项 -> 选择输入法默认模式 -> 英文

6 修改默认启动项

如果你的电脑安装了Linux,Windows 10安装成功之后,会修改启动项目的优先顺序,默认会直接进入Windows。下面的方法只适用于UEFI启动的情况。

#查看系统中硬盘或分区的 GUID 标识

bcdedit /enum all
bcdedit /enum firmware
#设置默认启动项
bcdedit /set {fwbootmgr} BOOTSEQUENCE {67b01161-4b5f-11e6-8f58-806e6f6e6963}
#设置启动菜单项顺序 以空格分隔
bcdedit /set {fwbootmgr} DISPLAYORDER {67b01161-4b5f-11e6-8f58-806e6f6e6963} {bootmgr}
#删除启动项
bcdedit /delete {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} /f
#win 10 用该命令挂载efi分区,无效
mountvol z: /s

除了设置默认启动项目之外,还需要设置启动项的顺序,否则开机用快捷键调出菜单之后,排在第一的项目会再次作为默认启动项目。

7 Bash On Ubuntu on Windows

7.1 安装Bash On Windows

我安装的是Windows 10 X64 Pro 14393,从14316版本的Windows 10开始增加了Windows SubSystem for Linux(Beta),适合我们程序猿,不用在另个系统之间来回切换了。Bash组件默认是关闭的,启用的方法是先选中“开始->设置->更新和安全->针对开发人员->开发人员模式”,然后按 Win+X,F 打开“程序和功能”,点击左侧的“启用或关闭Windows功能”,然后找到并勾选 Windows Subsystem for Linux (Beta) ,确定后会提示重启启动系统。

系统重启完成后,按 Win+X,A 打开命令提示符(或者按 Win+R 打开运行对话框),输入 bash 回车,第一次运行会从网上下载Ubuntu linux组件,按提示输入y。

#彻底删除

lxrun /uninstall /full
#重新安装
lxrun /install
#安装完之后,会自动设置root为默认用户,默认root没有密码
lxrun /install /y
#如果想添加用户,可以通过adduser添加用户,不必重装
adduser
#设置bash默认的用户,当你初次安装时忘记添加用户,或者忘记密码的时候,这个命令特别有用
lxrun /setdefaultuser xxx

7.2 更新Ubuntu

我比较关心的是emacs是否能够使用,Ubuntu子系统的14.04.4 LTS,源里的emacs相对比较旧,不能支持所有的spacemas的特性。想编译新版本的emacs,提示如下错误: Segmentation fault (core dumped) ./temacs –batch –load loadup bootstrap 编译无法通过,google到有人碰到类似的错误并且自行解决了,他放出来deb包,我测试过基本可以正常使用。 https://s3-us-west-1.amazonaws.com/royseto-public/dpkg/emacs24.5.2_24.5.2-1_amd64.deb 虽然可以用,但仍然有问题。我尝试虚拟机安装一个Ubuntu 14.04,根据下面的教程,顺利编译成功。

#编译教程,需要翻墙,已经保存到为知笔记 https://gist.github.com/favadi/18438172892bc4178b27

#更改cn.archive源会快一些

deb http://cn.archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu trusty main restricted multiverse universe
deb http://cn.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse

sudo apt-get update
sudo apt-get upgrade

7.3 升级到ubuntu 16.04

我自己用得比较多的是emacs,ubuntu 14.04默认的emacs是24.3,spacemacs官方目前的版本已经不支持了,升级到Ubuntu 16.04可以彻底解决这些问题。



#更改16.04源
deb http://cn.archive.ubuntu.com/ubuntu xenial main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu xenial main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse
deb http://cn.archive.ubuntu.com/ubuntu xenial-security main restricted universe multiverse
deb-src http://cn.archive.ubuntu.com/ubuntu xenial-security main restricted universe multiverse

sudo apt-get update
sudo apt-get dist-upgrade

中间出现两次需要你确认的,你都yes就好了,恭喜你,已经成功升级到ubuntu 16.04,但是进入bash会出现这样的提示

sudo: no tty present and no askpass program specified 

#退出bash
exit
lxrun /setdefaultuser root
vim /etc/sudoers
#增加行 Defaults visiblepw
#为你的用户添加root权限
your_username ALL=(ALL) ALL
#保存退出
#修改sudoers权限,否则出现如下错误
sudo: /etc/sudoers is world writable
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
#取消写的权限
chmod o-w /etc/sudoers

lsb_release -a
#No LSB modules are available.
#Distributor ID: Ubuntu
#Description: Ubuntu 16.04 LTS
#Release: 16.04
#Codename: xenial

7.4 安装Emacs

Ubuntu 16.04软件仓库当中的是Emacs 24.5,不会再出现helm-flx do not support emacs-24,3的问题。但通过Xserver启动时发生如下错误:

Couldn't open libGL.so.1: libGL.so.1: cannot open shared object file: No such file or directory

这是因为系统没有安装libgl1-mesa-glx这个库导致的,具体参考Android : error libGL.so: cannot open shared object file: No such file or directory

sudo apt-get install libgl1-mesa-glx

7.5 安装Spacemacs

git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d

emacs --insecure

安装包的过程当中,出现如下错误:

gnutls.c the tls connection was non-properly

sudo apt-get install gnutls-bin

7.6 安装搜狗输入法

尝试运行fcitx -d,提示出错X11没有初始化,以为是没有安装xserver,安装xorg后,错误依旧,暂时放弃安装输入法。

#安装xorg

sudo apt-get install xorg
#安装sogou输入法
sudo dpkg -i sogoupinyin.deb
#卸载sogou输入法
sudo apt-get remove fcitx* #(如不需保留配置文件用purge)
sudo apt-get autoremove #(自动卸载依赖软件)
sudo dpkg –get-selections | grep fcitx#(查询fcitx相关的软件包是否卸载)

折腾了Bash On Ubuntu on Windows一天了,感觉这个东西非常好了,如果微软把这件事情做好了,分分钟可以扭转乾坤。在软件仓库或者编译好的程序,是可以直接在子系统中运行的。程序在子系统中的执行速度要比虚拟机的系统要慢一些,这是我在编译Emacs的时候体验到的。但是Ubuntu子系统的好处在于,不运行子系统的程序的时候,不太会CPU和内存等资源。完美兼容两个系统,还需要很多工作要做,但是必须要个微软点个赞,Ubuntu子系统的这个想法非常棒,我们广大屌丝就可以继续使用Windows的平台了。

通过Xserver运行Firefox、virt-manager等应用会崩溃的解决方法。 Getting dbus and X server working

Sublime Text 3无法打开路径带空格的文件 修改注册表,路径添加双引号,其他编辑器也类似的,路径参数需要double quotes

Windows Registry Editor Version 5.00


[HKEY_CLASSES_ROOT\*\shell\Edit with Sublime Text]
"Icon"="D:\\Software\\Sublime_Text_3\\sublime_text.exe,0"

[HKEY_CLASSES_ROOT\*\shell\Edit with Sublime Text\command]
@="D:\\Software\\Sublime_Text_3\\sublime_text.exe \"%1\""

7.7 目前存在的问题

7.7.1 不能正常使用cli的程序

Last Updated 2018-10-14 日 23:38.
Created by Emacs 25.1.1 (Org mode 9.1.14)